package eu.dominicum.ft.pd.mao;

import eu.dominicum.ft.pd.FantasyTour;
import eu.dominicum.ft.pd.Person;
import eu.dominicum.ft.pd.mao.validator.NewOrExistingPerson;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;

/**
 * Method Arguments Object for {@link }.
 *
 * @author Harry Klerks
 * @since 2013M1
 */
@Named
@NewOrExistingPerson
public final class MakeParticipantMAO {

    /**
     * Pseudonym.
     */
    @NotNull(message = "Pseudoniem moet een waarde hebben")
    private String pseudonym;

    /**
     * Fantasy Tour ID.
     */
    @NotNull(message = "Fantasy Tour ID moet een waarde hebben")
    private Long fantasyTourId;

    /**
     * Fantasy Tour.
     */
    private FantasyTour fantasyTour;

    /**
     * Hide real name.
     */
    @NotNull(message = "Verberg echte naam moet een waarde hebben")
    private Boolean hideRealName;

    /**
     * Paid entry fee.
     */
    @NotNull(message = "Betaald moet een waarde hebben")
    private Boolean paidEntryFee;

    /**
     * Person ID.
     */
    @NotNull(message = "Persoon ID moet een waarde hebben")
    private Long personId;

    /**
     * Method Argument Object to make a new Person object.
     */
    @Inject
    @Valid
    private MakePersonMAO makePersonMAO;

    /**
     * A reference to an existing {@link Person} object.
     */
    private Person person;

    /**
     * Default constructor.
     */
    public MakeParticipantMAO() {

    }

    /**
     * Post construct initialiser.
     */
    @PostConstruct
    public void init() {

        this.personId = 0L;
    }

    /**
     * .
     *
     * @return String
     */
    public String getPseudonym() {
        return pseudonym;
    }

    /**
     * .
     *
     * @param newName -
     */
    public void setPseudonym(final String newName) {
        this.pseudonym = newName;
    }

    /**
     * .
     *
     * @return Long
     */
    public Long getFantasyTourId() {
        return fantasyTourId;
    }

    /**
     * .
     *
     * @param newFantasyTourId -
     */
    public void setFantasyTourId(final Long newFantasyTourId) {
        this.fantasyTourId = newFantasyTourId;
    }

    /**
     * .
     *
     * @param newFantasyTour -
     */
    public void setFantasyTour(final FantasyTour newFantasyTour) {
        this.fantasyTour = newFantasyTour;
    }

    /**
     * .
     *
     * @return FantasyTour
     */
    public FantasyTour getFantasyTour() {
        return fantasyTour;
    }

    /**
     * .
     *
     * @param newHideRealName -
     */
    public void setHideRealName(final Boolean newHideRealName) {
        this.hideRealName = newHideRealName;
    }

    /**
     * .
     *
     * @return Boolean
     */
    public Boolean getHideRealName() {
        return hideRealName;
    }

    /**
     * .
     *
     * @param newPaidEntryFee -
     */
    public void setPaidEntryFee(final Boolean newPaidEntryFee) {
        this.paidEntryFee = newPaidEntryFee;
    }

    /**
     * .
     *
     * @return Boolean
     */
    public Boolean getPaidEntryFee() {
        return paidEntryFee;
    }

    /**
     * .
     *
     * @param newPersonId -
     */
    public void setPersonId(final Long newPersonId) {
        this.personId = newPersonId;
    }

    /**
     * .
     *
     * @return Long
     */
    public Long getPersonId() {
        return personId;
    }

    /**
     * .
     *
     * @param newMakePersonMAO -
     */
    public void setMakePersonMAO(final MakePersonMAO newMakePersonMAO) {
        this.makePersonMAO = newMakePersonMAO;
    }

    /**
     * .
     *
     * @return MakePersonMAO
     */
    public MakePersonMAO getMakePersonMAO() {
        return makePersonMAO;
    }

    /**
     * .
     *
     * @return Person
     */
    public Person getPerson() {
        return person;
    }

    /**
     * .
     *
     * @param newPerson -
     */
    public void setPerson(final Person newPerson) {
        this.person = newPerson;
    }
}
